#include<iostream>
#include<string>
#include<fstream>
#include"contacts.pb.h"

using namespace std;


void PrintContacts(const contacts::Contacts& contacts)
{
    for(int i = 0;i < contacts.contacts_size();++i)
    {//分别遍历通讯录里面的每一个联系人
        cout<<"--------联系人"<<i+1<<"--------"<<endl;

        const contacts::PersonInfo& people = contacts.contacts(i);//通过下标获取一个people
        
        //依次打印people内部每一个信息
        cout<<"name: "<<people.name()<<endl;
        cout<<"age: "<<people.age()<<endl;
        for(int j = 0;j < people.phone_size();++j)
        {
            const contacts::PersonInfo_Phone& phone = people.phone(j);
            cout<<"phone"<<j+1<<" :"<<phone.number();
            cout<<"   ("<<phone.PhoneType_Name(phone.type())<<")"<<endl;
        }
    }
}
const string filename = "contacts.bin";

int main()
{
    /*执行此宏：防止意外连接到与编译的头文件不兼容的库版本，如果
    检测到版本不匹配，程序将终止。
    每一个.pb.cc文件在启动的时候都会自动调用此宏。
    在使用C++ Protobuf之前调用这个宏是好习惯*/
    GOOGLE_PROTOBUF_VERIFY_VERSION;

    contacts::Contacts contacts;
    //读取本地已存在的二进制文件
    //1.打开文件/不存在则创建
    fstream input(filename.c_str(),ios::in | ios::binary); 
    
    //默认文件已经存在
    if(!contacts.ParseFromIstream(&input)){
        cerr<<"Parse Error"<<endl;
        input.close();
        exit(-1);
    }

    //打印通讯录列表
    PrintContacts(contacts);

    input.close();
    return 0;
}